//
//  ViewController.swift
//  tableViewCell-Test
//
//  Created by 胡忠诚 on 15/12/13.
//  Copyright © 2015年 biyu6. All rights reserved.
/*思路
1.实现tableViewController
    1.修改控制器为UITableViewController
    2.干掉sb中的控制器,拖一个UITableViewController ,关联控制器并设置为初始控制器inital
    3.给tableViewCell设置一个重用标识:cellID
2.模拟网络数据加载,通过闭包来回调传值
    1.多线程网络加载数据(GCD)
    2.搞定字典转模型
    3.搞定传值
3.实现自定义cell
    1.sb布局cell
    2.实现cell的数据源方法
4.把数据关联到cell
    1.强转成自定义的cell
    2.didSet方法赋值
    3.给每行cell赋值
5.详情页面的搭建(sb)
6.详情页面的数据展示
    1.拿到要跳转的目标控制器 (拿不到就返回)
    2.获取当前选中行数据  (拿不到就返回)
    3.根据indexPath获取数据 并传递数据
7.扫尾:实现一些其他功能
    1.设置详情页面保存按钮的状态:监听文本框的改变
    2.设置详情页面保存按钮的点击事件-保存数据,返回页面
*/

import UIKit

class ViewController: UITableViewController {

    var array: [BYPerson]?
    
    override func viewDidLoad() {
        super.viewDidLoad()
        //1.网络加载数据
        loadData { (persons) -> () in
//            print(persons)
            self.array = persons
        //2.刷新UI
            self.tableView.reloadData()
        }
    }
    //3.控制器传值:从一个控制器跳转到另外一个控制器的调用的方法(传值给详情页面)
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        //1.拿到要跳转的目标控制器 (拿不到就返回)
        guard let detailVC = segue.destinationViewController as? BYDetailViewController else{
            return
        }
        //2.获取当前选中行数据  (拿不到就返回)
        if let indexPath = tableView.indexPathForSelectedRow {
        //3.根据indexPath获取数据 并传递数据
            detailVC.person = array![indexPath.row]
        //4.数据的回调
            detailVC.saveCallBack = {
                //刷新操作
                self.tableView.reloadData()
            }
        }else {
            return
        }
    }
}
//MARK: 异步加载网络数据
extension ViewController {// extension 相当于 延展
    func loadData(finish: (persons:[BYPerson]) -> ()){
          dispatch_async(dispatch_get_global_queue(0, 0)) { //() -> Void in  //无参无反的闭包 可忽略
            //2.3定义一个数组
            var list = [BYPerson]()
            
            //2.1获取到网络字典(模拟)
            for i in 0..<30 {
                let name = "swift\(i)" //30个name
                let age = random () % 90 //90以内的随机数
                let dict = ["name": name, "age": age]
                
             //2.2网络字典转模型
                let p = BYPerson(dict: dict as! [String: AnyObject])// as! 强制转换
                
            //2.3加入到数组中
                list.append(p)
            }
//           print(list)
            
            //数据加载后,回到主线程更新UI
            dispatch_async(dispatch_get_main_queue(), { //() -> Void in  //无参无反的闭包 可忽略
                //数据回调
                finish(persons: list)
            })
        }
    }
}
    
//MARK: tableViewCell-DataSource
extension ViewController {
    //1.cell 有多少行
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        
        return array?.count ?? 0 //??防崩
    }
    
    //2.每行cell 是什么样子
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        
        //cell重用(与OC相同)
        let cell = tableView.dequeueReusableCellWithIdentifier( "cellID", forIndexPath: indexPath) as! BYPersonTableViewCell //强转成自定义的cell
        //给每行cell赋值
        cell.person = array![indexPath.row]
        
//        cell.textLabel?.text = array![indexPath.row].name
        return cell
    }
}
    

